package com.zxy.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zxy.pojo.dto.*;
import com.zxy.pojo.entity.CourseContract;
import com.zxy.pojo.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@Mapper
public interface ReportMapper {

    //客户统计列表展示
    Page<CourseContract> contractStatisticsList(@Param("page") Page<CourseContract> page,@Param("dto") CustomerDTO dto);

    //客户统计数据表的
     List<HashMap<String,String>> contractStatistics(@Param("beginCreateTime") LocalDate beginCreateTime, @Param("endCreateTime") LocalDate endCreateTime);

    //学科客户分布
    List<HashMap<String, Objects>> subjectStatistics(@Param("beginCreateTime") LocalDate beginCreateTime, @Param("endCreateTime") LocalDate endCreateTime);

    //销售列表展示 归属部门
    Page<deptStatisticsListVo> deptStatisticsList(@Param("page") Page<CourseContract> page,@Param("dto") PageDTO dto);

    //销售列表展示 归属人
    Page<deptStatisticsListVo> ownerShipStatisticsList(Page<CourseContract> page, PageDTO dto);

    //销售列表 归属渠道
    Page<deptStatisticsListVo> hannelStatisticsList(Page<CourseContract> page, PageDTO dto);

    //销售统计
    List<HashMap<String, Objects>> salesStatistics(@Param("beginCreateTime") LocalDate beginCreateTime, @Param("endCreateTime") LocalDate endCreateTime);

    //线索统计 分页展示
    Page<ClueDetailVo> cluesStatistics(@Param("page") Page<ClueDetailVo> page, @Param("dto") CluesPageNumDTO dto);


    //线索统计 新增线索数量
    List<HashMap<String, Object>> cluesStatisticls(@Param("beginCreateTime")LocalDate beginCreateTime, @Param("endCreateTime") LocalDate endCreateTime);


    //渠道统计 列表展示
    Page<ChannelVo> activityStatistics(@Param("page") Page<ChannelVo> page,@Param("dto") ChannelPageDTO dto);

    //渠道数量
    List<ChaneCountlVo> chanelStatistics(@Param("beginCreateTime") LocalDate beginCreateTime,@Param("endCreateTime") LocalDate endCreateTime);

    //活动数量
    List<ChaneActityVo> activityStatisticls(LocalDate beginCreateTime, LocalDate endCreateTime);




    /**
     * 统计指定日期范围内的线索总数
     */
    Integer countCluesByDateRange(@Param("beginDate") LocalDate beginDate, @Param("endDate") LocalDate endDate);

    /**
     * 统计指定日期范围内的有效线索数
     */
    Integer countEffectiveCluesByDateRange(@Param("beginDate") LocalDate beginDate, @Param("endDate") LocalDate endDate);

    /**
     * 统计指定日期范围内的商机数
     */
    Integer countBusinessByDateRange(@Param("beginDate") LocalDate beginDate, @Param("endDate") LocalDate endDate);

    /**
     * 统计指定日期范围内的合同数
     */
    Integer countContractByDateRange(@Param("beginDate") LocalDate beginDate, @Param("endDate") LocalDate endDate);

    /**
     * 查询业务变更统计数据
     */
    List<BusinessChangeStatsVo> businessChangeStatistics(@Param("beginCreateTime") LocalDate beginCreateTime,
                                                         @Param("endCreateTime") LocalDate endCreateTime);

    /**
     * 查询销售统计数据
     */
    List<HashMap<String, Object>> salesStatistic(@Param("beginCreateTime") LocalDate beginCreateTime,
                                                 @Param("endCreateTime") LocalDate endCreateTime,
                                                 @Param("deptId") Integer deptId);

    /**
     * 查询特定部门在日期范围内的合同数量
     */
    List<HashMap<String, Object>> countContractByDeptId(@Param("deptId") Integer deptId,
                                                        @Param("beginDate") LocalDate beginDate,
                                                        @Param("endDate") LocalDate endDate);













/*

    */
/**
     * 查询特定部门在日期范围内的合同数量
     *//*

    List<HashMap<String, Object>> countContractByDeptId(@Param("deptId") Integer deptId,
                                                        @Param("beginDate") LocalDate beginDate,
                                                        @Param("endDate") LocalDate endDate);

*/
    /**
     * 统计待跟进线索数
     */
    Integer countToFollowedClues();

    /**
     * 统计待跟进商机数
     */
    Integer countToFollowedBusiness();

    /**
     * 统计待分配线索数
     */
    Integer countToAllocatedClues();

    /**
     * 统计待分配商机数
     */
    Integer countToAllocatedBusiness();

    /**
     * 统计今日销售金额
     */
    Double sumTodaySalesAmount();

    @Select("SELECT COALESCE(SUM(order_amount), 0) FROM course_contract WHERE create_time BETWEEN #{beginCreateTime} AND #{endCreateTime}")
    Double sumSalesAmountByDateRange(LocalDate beginCreateTime, LocalDate endCreateTime);
}
